#include"../logs/yd_log.h"

void loggerTest(const std::string &logger_name) {
    yd::logger::ptr lp = yd::getLogger(logger_name);
    //assert(lp.get());
    
    lp->debug("%s", "logger->debug");
    lp->info("%s", "logger->info");
    lp->warn("%s", "logger->warn");
    lp->error("%s", "logger->error");
    lp->fatal("%s", "logger->fatal");
    LOG_DEBUG(lp, "%s", "LOG_DEBUG");
    LOG_INFO(lp, "%s", "LOG_INFO");
    LOG_WARN(lp, "%s", "LOG_WARN");
    LOG_ERROR(lp, "%s", "LOG_ERROR");
    LOG_FATAL(lp, "%s", "LOG_FATAL");
    
    
    std::string log_msg = "示例代码";
    size_t fsize = 0;
    size_t count = 0;
    while(count < 10) {
        std::string msg = log_msg + std::to_string(count++);
        lp->error("%s", msg.c_str());
    }
}

void functional_test() {
    yd::GlobalLoggerBuilder::ptr lbp(new yd::GlobalLoggerBuilder);
    lbp->buildLoggerName("all_sink_logger");
    lbp->buildFormatter("[%d][%c][%f:%l][%p] %m%n");
    lbp->buildLoggerLevel(yd::log_level::value::DEBUG);
    lbp->buildSink<yd::StdoutSink>();
    lbp->buildSink<yd::FileSink>("./logs/sync.log");
    lbp->buildSink<yd::RollSink>("./logs/roll-", 10 * 1024 * 1024);
    lbp->buildLoggerType(yd::logger::Type::LOGGER_ASYNC);
    lbp->build(); 
    loggerTest("all_sink_logger");
}
int main(int argc, char *argv[])
{
    functional_test();
    return 0;
}

// int main()
// {

//     // // yd::log_msg msg("root","test.cpp",5,"测试代码",yd::log_level::value::DEBUG);
//     // // yd::formatter fmt;
//     // // std::string res=fmt.format(msg);
//     // // yd::log_sink::ptr lgs= yd::factory::create<yd::FileSink>("./log.file/test.log");
//     // // lgs->log(res.c_str(),res.size());

//     // //std::cout<<res<<std::endl;
//     // // time_t now= yd::date::now();
//     // // std::cout<<now;
//     // // yd::file::create_dir(std::string("./abc/bcd"));
//     // // yd::log_sink::ptr lgs=yd::factory::create<yd::StdoutSink>();
//     // // yd::formatter::ptr fmt(new yd::formatter());
//     // // std::vector<yd::log_sink::ptr>arr({lgs});
//     // // yd::Synclogger sl("test",fmt,arr);
//     // // sl.error("test.cpp",23,"测试代码");

//     // yd::LocalLoggerBuilder llb;
//     // llb.buildLoggerName("test1");
//     // llb.buildLoggerType(yd::logger::Type::LOGGER_ASYNC);
//     // llb.buildSink<yd::FileSink>("./log.file/test.log");
//     // llb.buildSink<yd::StdoutSink>();
//     // yd::logger::ptr anic=llb.build();
//     // int n=500;
//     // while (n--)
//     // {
//     //     anic->debug("test.cpp",32,"测试代码%d",n);
//     // }
    
//     return 0;
// }